package com.example.springbootjavafx.view;


import com.example.springbootjavafx.domain.User;
import com.example.springbootjavafx.scopes.UserDetailScope;
import com.example.springbootjavafx.service.UserService;
import de.saxsys.mvvmfx.InjectScope;
import de.saxsys.mvvmfx.ScopeProvider;
import de.saxsys.mvvmfx.ViewModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


/**
 * HelloViewModel 类实现了 ViewModel 接口，用于 MVVM 架构中的视图模型部分。
 * 它提供了与视图交互的属性和方法，包括用户的姓名和问候信息。
 */
@Component
@Slf4j
public class AddViewModel implements ViewModel {


    @InjectScope
    UserDetailScope userDetailScope;

    @Autowired
    private UserService userService;
    /**
     * 初始化方法，在视图模型实例化后调用。
     * 它设置了一个监听器，以根据用户输入的名字动态更新问候信息。
     */
    public void initialize() {

    }



    /**
     * 发布保存用户详情的事件。
     * <p>
     * 通过调用用户详情作用域的发布方法，主动触发保存用户详情的操作。此方法的调用者通常不直接负责保存用户详情的逻辑，
     * 而是通过发布此事件来通知其他监听此事件的组件或服务执行实际的保存操作。
     * 这种设计模式有利于解耦调用方和实际的保存逻辑，使得系统更加灵活，易于扩展和维护。
     *
     */
    public void saveUser() {
        User user = User.builder()
                .address(userDetailScope.getAddressProperty().get())
                .id(userDetailScope.getIdProperty().get())
                .name(userDetailScope.getNameProperty().get()).build();
        this.userService.save(user);
        userDetailScope.publish("saveUser");//发布保存事件
    }

}
